#define _CRT_SECURE_NO_WARNINGS
//#include<stdio.h>
//#include<assert.h>
//typedef struct QueueNode {
//	struct QueueNode* next;
//	int val;
//}QNode;
//
//typedef struct Queue {
//	QNode* front;
//	QNode* rear;
//	int size;
//}Que;
//
//void QueueInit(Que* pq) {
//	assert(pq);
//	pq->front = NULL;
//	pq->rear = NULL;
//	pq->size = 0;
//}
//
//void QueuePush(Que* pq, int x) {
//	//......
//}

//#include<iostream>
//using namespace std;
//struct stack {
//	int* _a;
//	int _top;
//	int _capacity;
//
//	void Init() {
//		_a = nullptr;
//		_top = 0;
//		_capacity = 0;
//	}
//	void Push(int x) {
//		//....
//	}
//};

//#include"stack.h"
//struct A {
//
//	void Print() {
//		cout << "A" << endl;
//	}
//};
//int main() {
//	A a;
//	cout << sizeof(A) << endl;
//	cout << sizeof(a) << endl;
//
//	/*stack s1;
//	s1.Init();
//	int ret = s1.Empty();
//	cout << ret << endl;*/
//	return 0;
//}

#include<iostream>
using namespace std;
//class A {
//public:
//	void Print() {
//		cout << _a << endl;
//	}
//private:
//	int _a;
//};
//int main() {
//	A* p = nullptr;
//	p->Print();
//	return 0;
//}

//class Date {
//public:
//	Date(int year=1,int month=1,int day=1) {
//		_year = year;
//		_month = month;
//		_day = day;
//	}
//	void Print() {
//		cout << _year << "-" << _month << "-" << _day << endl;
//	}
//private:
//	int _year=10;
//	int _month=10;
//	int _day=10;
//};
//class Date {
//public:
//	Date() {
//		_year = 1;
//		_month = 1;
//		_day = 1;
//	}
//	Date(int year=1,int month=1,int day=1) {
//		_year = year;
//		_month = month;
//		_day = day;
//	}
//	void Print() {
//		cout << _year << "-" << _month << "-" << _day << endl;
//	}
//private:
//	int _year=1;
//	int _month=1;
//	int _day=1;
//};
//class Date {
//public:
//	Date(int year,int month,int day) {
//		_year = year;
//		_month = month;
//		_day = day;
//	}
//	void Print() {
//		cout << _year << "-" << _month << "-" << _day << endl;
//	}
//private:
//	int _year = 1;
//	int _month = 1;
//	int _day = 1;
//};
//int main() {
////	Date d1;
////	d1.Print();
////	return 0;
////}
//
//class stack {
//public:
//	stack(int capacity=3) {
//		cout << "stack" << endl;
//		int* tmp = (int*)malloc(sizeof(int) * capacity);
//		if (tmp == nullptr) {
//			perror("malloc failed");
//			return;
//		}
//		_a = tmp;
//		_top = 0;
//		_capacity = capacity;
//	}
//	~stack()
//	{
//		cout << "~stack" << endl;
//		free(_a);
//		_a = nullptr;
//		_top = 0;
//		_capacity = 0;
//	}
//private:
//	int* _a;
//	int _top;
//	int _capacity;
//};
//
//int main() {
//	stack s1;
//	cout << "hello world" << endl;
//	return 0;
//}





#include<iostream>
using namespace std;
class Date {
public:
	//Date(const Date& x) {
	//	_year = x._year;
	//	_month = x._month;
	//	_day = x._day;
	//}
	void Print() {
		cout << _year << "/" << _month << "/" << _day;
		cout << endl;
	}
private:
	int _year = 1;
	int _month = 1;
	int _day = 1;
};
//int main() {
//	Date d1;
//	Date d2(d1);
//	d1.Print();
//	d2.Print();
//	//stack s1;
//	//func(s1);
//	//stack s2(s1);
//	//int* p = (int*)malloc(sizeof(int*) * 3);
//	//free(p);
//	//free(p);
//
//	return 0;
//}

class stack {
public:
	stack(int capacity = 3) {
		int* tmp = (int*)malloc(sizeof(int) * capacity);
		if (tmp == nullptr) {
			perror("malloc failed");
			return;
		}
		_a = tmp;
		_top = 0;
		_capacity = capacity;
		cout << _a << endl;

	}
	stack(const stack& x) {
		int* tmp = (int*)malloc(sizeof(int) * _capacity);
		if (tmp == nullptr) {
			perror("malloc fail");
			exit(-1);
		}
		memcpy(tmp, x._a, sizeof(int) * x._top);
		_a = tmp;
		_top = x._top;
		_capacity = x._capacity;
	}

	~stack()
	{
		cout << _a << endl;
		free(_a);
		_a = nullptr;
		_top = 0;
		_capacity = 0;
	}
private:
	int* _a;
	int _top;
	int _capacity;
};
void func(stack x) {
	cout << "func" << endl;
}
stack s1;
int main() {
	stack s2;
	stack s3;
	static stack s4;
	return 0;
}